import java.net.*;
import java.io.*;
/*
 * @author HuGo LouReNCo 100915
 */
public class ClienteGet {

	public static void main(String[] args) {
		Socket socket = null;
		try {
			// criando conexao com o servidor
			socket = new Socket(InetAddress.getByAddress(new byte[] {
					(byte) 192, (byte) 168, 25, 14 }), 60988);

			// pegar os streams Input e Output
			DataOutputStream saidaDOS;
			saidaDOS = new DataOutputStream(socket.getOutputStream());

			DataInputStream entradaDIS;
			entradaDIS = new DataInputStream(socket.getInputStream());

			// enviando dados para o servidor
			saidaDOS.writeUTF("GET");

			// mede o tempo inicio
			long tempoInicio = System.currentTimeMillis();

			// recebendo arquivo
			String nomeDoArquivo = entradaDIS.readUTF();
			long tamanhoDoArquivo = entradaDIS.readLong();
			System.out.println("Recebendo o arquivo: " + nomeDoArquivo + " - "
					+ tamanhoDoArquivo);

			FileOutputStream saidaFOS = new FileOutputStream(nomeDoArquivo);

			byte[] buffer = new byte[4096];
			int tamanho;
			while ((tamanho = entradaDIS.read(buffer)) != -1) {
				saidaFOS.write(buffer, 0, tamanho);
			}

			// mede o tempo do fim
			long tempoFim = System.currentTimeMillis();
			// calcula o tempo em segundos
			double tempo = (tempoFim - tempoInicio) / 1000;

			// requisicao enviada
			saidaDOS.close();
			// arquivo recebido
			entradaDIS.close();
			saidaFOS.close();
			// libera canal do socket
			saidaFOS.flush();
			// fechando conexao
			socket.close();
			System.out.println("Transferencia concluida.");
			// gravando taxa no arquivo
			File resultado;

			resultado = new File("resultado.txt");
			FileOutputStream fos = new FileOutputStream(resultado);
			String texto = "\nTaxa: " + tempo;
			fos.write(texto.getBytes());
			fos.close();
			
		} catch (UnknownHostException e) {
			System.out.println("Socket:" + e.getMessage());
		} catch (EOFException e) {
			System.out.println("EOF:" + e.getMessage());
		} catch (IOException e) {
			System.out.println("IOF:" + e.getMessage());
		} finally {
			if (socket != null)
				try {
					socket.close();
				} catch (IOException e) {
					System.out.println("IOF:" + e.getMessage());
				}
		}
	}
}